Traditionally, integrated circuit processors are designed either as general purpose microprocessors or as application specific integrated circuits (ASIC's). A general purpose microprocessor is controlled by a fixed instruction set that allows a user to write computer programs which invoke arbitrary sequences of microprocessor instructions. This provides flexibility, but decreases performance since the circuitry is not optimized for any specific application. An ASIC is designed by describing its structure in terms of circuit primitives such as Boolean gates and registers. The circuit designer arranges the circuit primitives so as to optimize performance for a specific application (such as video compression or audio decoding). While an ASIC provides high performance, its fixed architecture cannot be changed after fabrication to adapt to new algorithms or changing standards. Additionally, the high development costs and lengthy design cycle are not suited to rapidly developing markets.
One approach to reducing the length of the design cycle is the use of automatic design tools that take a specific algorithm and architecture constraints as inputs and produce a design for an integrated circuit. However, this approach does not allow architecture of the integrated circuit to be changed after fabrication.
An alternative approach is the use of reconfigurable hardware. Reconfigurable hardware utilizes programmable logic to provide a degree of reconfigurability in an integrated circuit. An example is a field programmable gate array (FPGA). This approach permits the architecture to be changed after fabrication. However, often it is necessary to reset the hardware whenever the architecture needs to be modified.
A still further approach uses run-time reconfigurable architecture, is which some feature of the architecture can be modified while an application is running. Examples include processors with programmable data paths between computational units.